Windows Forms - Copia DataGridView para o Clipboard

Ao criar esta funcionalidade segui o padrão dos arquivos csv padrão, ou seja, vbtab separa os campos e vbcrlf separa as linhas.

Sendo assim após chamar esta função é só abrir o Excel e colar.

Testei com mais de 20.000 registros e demorou uns 4 segundos para fazer a transferência sendo que o tempo depende dos recursos da máquina.

Criei uma função 'limpa' que elimina ou muda os caracteres indesejados no campo original.
Por exemplo, CR, LF, TAB são eliminados pois são delimitadores dos arquivos CSV.
A função limpa também troca o caractere apóstrofo para acento agudo para evitar problemas com o SQL Server.

Código

'copia os dados de um DataGridView para o Clipboard
Private Sub CopiarDGVdgvDadosClipBoard()
    Dim a As Integer
    Dim b As Integer
    Dim c As String
    Dim d As String

    c = ""
    'headers
    For b = 0 To FrmDataSet.dgvDados.Columns.Count - 1
        c += FrmDataSet.dgvDados.Columns(b).Name + vbTab
    Next
    c += vbCrLf

    'dados
    For a = 0 To FrmDataSet.dgvDados.Rows.Count - 1
        For b = 0 To FrmDataSet.dgvDados.Columns.Count - 1
            If IsDBNull(FrmDataSet.dgvDados.Rows(a).Cells(b).Value) Then
                c += vbTab
            Else
                d = CStr(FrmDataSet.dgvDados.Rows(a).Cells(b).Value)
                d = Limpa(d)
                c += d + vbTab
            End If
        Next
        c += vbCrLf
    Next

    Clipboard.Clear()
    Clipboard.SetText(c)
End Sub


    Public Function Limpa(dado As String) As String
        Dim a As String

        a = Trim(dado)
        If a = "" Then a = " " 'precisa ter pelo menos um caractere para não deixar juntar ||||
        a = Replace(a, vbCr, "")
        a = Replace(a, vbLf, "")
        a = Replace(a, vbTab, "")
        a = Replace(a, vbCrLf, "")
        a = Replace(a, "|", "")
        a = Replace(a, "'", "´")

        Return a
    End Function